# -*- coding: utf-8 -*-
# Author: xiantingDeng
# Email: dengxianting@shxgroup.net
# Time: 2020/3/26 18:52

import os
import time

from PIL import Image


def get_root_dir():
    '''
    获取当前项目根路径
    :return:返回当前项目绝对路径
    '''
    return os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))


def get_sub_dir(sub_dir_name):
    '''
    获取项目下子目录的路径
    :param sub_dir_name: 项目下子目录名称
    :return: 返回当前项目下子目录的绝对路径
    '''
    return os.path.join(get_root_dir(), sub_dir_name)


def get_app_dir(package):
    '''
    获取APP文件夹下包名绝对路径
    :param package: 包名
    :return: 返回绝对目录
    '''
    return os.path.join(get_sub_dir("app"), package)


def get_real_output_dir(dir_name):
    '''
    获取optput文件夹根下子文件夹目录
    :param dir_name: 文件名称
    '''
    output_dir = os.path.join(get_sub_dir("output"), dir_name)
    return os.path.join(output_dir)


def get_report_dir():
    '''
    获取report文件夹
    :return: 返回report文件夹路径
    '''
    report_dir = os.path.join(get_real_output_dir("report"))
    return report_dir


def get_real_data_dir(dir_name):
    '''
    获取data文件夹根下子文件夹目录
    :param dir_name: 文件名称
    :return: 返回data文件夹子目录绝对路径
    '''
    data_dir = os.path.join(get_sub_dir("data"), dir_name)
    return os.path.join(data_dir)


def get_real_prod_dir(dir_name):
    '''
    获取data文件夹下子文件夹目录的port_data
    :param dir_name: 文件名称
    :return: 返回port_dat文件夹子目录绝对路径
    '''
    prod_dir = os.path.join(get_real_data_dir("port_data"), dir_name)
    return prod_dir


def get_real_ui_dir(dir_name):
    '''
    获取data文件夹下子文件夹目录的port_data
    :param dir_name: 文件名称
    :return: 返回ui_dat文件夹子目录绝对路径
    '''
    prod_dir = os.path.join(get_real_data_dir("ui_data"), dir_name)
    return prod_dir


def get_real_ini_dir(dir_name):
    '''
    获取config文件夹下子文件夹目录的ini文件
    :param dir_name: 文件名称
    :return: 返回ini文件夹子目录绝对路径
    '''
    ini_dir = os.path.join(get_sub_dir("config"), dir_name)
    return ini_dir


def get_report_file_path():
    '''
    动态获取report目录下文件绝对路径
    :return:返回report文件绝对路径
    '''
    report_root_dir = get_sub_dir(get_real_output_dir("report"))
    file_name = f"{time.strftime('%Y-%m-%d_%H', time.localtime())}"
    file_path = os.path.join(report_root_dir, file_name)
    return file_path


def get_screenshot_path():
    '''
    动态创建截图路径
    :return: 返回截图路径
    '''
    img_file = get_sub_dir(get_real_output_dir("img"))
    path = os.path.join(img_file, time.strftime('%Y-%m-%d_%H_%M', time.localtime()))
    isExists = os.path.exists(path)
    if not isExists:
        os.makedirs(path)
        return path
    else:
        return False


def get_img_file_path(img_name):
    '''
    获取img目录下目录下的文件绝对路径
    :return: 返回img文件绝对路径
    '''
    file_name = f"{img_name}.png"
    file_path = os.path.join(get_screenshot_path(), file_name)
    return file_path


def get_img_data_path(img_name):
    '''
    获取data目录下的文件绝对路径
    :param img_name: 文件名称
    :return: 返回img文件绝对路径
    '''
    img_root_dir = get_sub_dir(get_real_data_dir("ui_data"))
    file_name = img_name + ".png"
    file_path = os.path.join(img_root_dir, file_name)
    return file_path

def get_case_dir(name):
    '''
    获取case下的目录文件
    :param name: 文件名字
    :return: 返回文件绝对路径
    '''
    return os.path.join(get_root_dir(), "case", name)

def get_time_report():
    '''
    生成以时间戳为名称的测试报告
    :return: 返回测试报告名称
    '''
    times = time.strftime('%Y-%m-%d_%H_%M', time.localtime())
    return os.path.join(get_real_output_dir("report"), times)

def get_log_dir(name):
    '''
    获取log日志下的绝对路径
    :return: 返回log日志绝对路径
    '''
    log_file = os.path.join(get_sub_dir("output"), "log")
    if not os.path.exists(log_file):
        os.mkdir(log_file)
    return os.path.join(log_file, name)


def get_log_name_dir(name):
    '''
    获取log日志下的目录
    :return: 返回错误日志文件（通过时间戳生成）
    '''
    file = get_log_dir(name)
    if not os.path.exists(file):
        os.mkdir(file)
    return os.path.join(file,time.strftime('%Y-%m-%d_%H_%M',time.localtime())+".log")


#
#
# def screenshot_code_cut():
#     '''
#     对验证码图片进行切割
#     :param img_name: 图片名称
#     :return:返回图片路径
#     '''
#     img = Image.open(get_screenshot_code_path())
#     img_size = img.size
#     h = img_size[1]
#     w = img_size[0]
#     x = 0.12 * w
#     y = 0.35 * h
#     w = 0.5 * w
#     h = 0.07 * h
#     region = img.crop((x, y, x + w, y + h))
#     region.save(get_screenshot_code_cut_path())
#     return get_screenshot_code_cut_path()

def get_report_name():
    '''
    读取全局测试报告目录
    :return: 测试报告目录名称
    '''
    try:
        file_path = os.path.join(get_root_dir(), "report.lock")
        with open(file_path, encoding="utf-8") as f:
            return f.read()
    except Exception as e:
        print("系统异常：{}".format(e))

if __name__ == '__main__':
    print(get_time_report())